/*
 * Copyright 2004-2006 公司名
 * 本软件及其所有拷贝的名称，与光盘上或本软件中注明的公司同在。
 * 本软件及文档享有版权，并受国家版权法及国际协约条款的保护。
 * 您不可以从本软件中去掉其版权声明；并保证为本软件的拷贝（本部或部分）复制版权声明。
 * 您同意制止以任何形式非法拷贝本软件及文档。
 * 版权信息参见：
 *      http://www.companyname.cn/licenses
 */

package com.companyname.common.sysframe.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

import com.companyname.common.base.util.BaseObjectPriAscComparator;
import com.companyname.common.sysframe.define.UserStatus;

/**
 * <p>Title: 岗位 </p>
 * <p>Description: 岗位 Post </p>
 * <p>Copyright: Copyright (c) 2004-2006</p>
 * <p>Company: 公司名</p>
 * @ $Author: 作者名 $
 * @ $Date: 创建日期 $
 * @ $Revision: 1.0 $
 * @ created in 创建日期
 *
 */

public class Post extends Unit
                  implements Serializable
{
        // 从属机构
        private Org org;
        
        // 从属角色
        private Role role;
        
        private Set post2Users;

        private int roleLength;
        
        private int orgLength;
        
        /**
         * 构造函数
         */
        public Post()
        {
                // for hibernate
        }
        
        public Post(Org org,Role role)
        {
                this.org = org;
                this.role = role;
                this.orgLength = 1;
                this.roleLength = 1;
        }
        
        public Post(Org org,Role role,int orgLength,int roleLength)
        {
                this.org = org;
                this.role = role;
                this.orgLength = orgLength;
                this.roleLength = roleLength;
        }

        // code(业务主键)
        public String getCode()
        {
                return this.org.getCode() + "_" + this.role.getCode();

        }

        // name(名称)
        public String getName()
        {
                return this.org.getFullNameWithLength(this.orgLength)
                     + this.role.getFullNameWithLength(this.roleLength);
        }

        public Org getOrg()
        {
                return org;
        }

        public void setOrg(Org org)
        {
                this.org = org;
        }

        public Role getRole()
        {
                return role;
        }

        public void setRole(Role role)
        {
                this.role = role;
        }
        
        /**
         * @return 返回 post2Users。
         */
        public Set getPost2Users()
        {
                return post2Users;
        }

        /**
         * @param post2Users 要设置的 post2Users。
         */
        public void setPost2Users(Set post2Users)
        {
                this.post2Users = post2Users;
        }
        
        // 取得当前岗位下面所有人员
        public List getUsers()
        {
                List users = new ArrayList();
                if(this.post2Users != null)
                {
                        Object[] p2us = this.post2Users.toArray();
                        for(int i = 0; i < p2us.length; i ++)
                        {
                                Post2User p2u = (Post2User)p2us[i];
                                if(p2u.getUser().getStatus() == UserStatus.VALID)
                                {
                                        users.add(p2u.getUser());
                                }
                        }
                        Collections.sort(users,new BaseObjectPriAscComparator());
                }
                return users;
        }

        /**
         * @return 返回 orglength。
         */
        public int getOrgLength()
        {
                return orgLength;
        }

        /**
         * @param orglength 要设置的 orglength。
         */
        public void setOrgLength(int orgLength)
        {
                this.orgLength = orgLength;
        }

        /**
         * @return 返回 roleLength。
         */
        public int getRoleLength()
        {
                return roleLength;
        }

        /**
         * @param roleLength 要设置的 roleLength。
         */
        public void setRoleLength(int roleLength)
        {
                this.roleLength = roleLength;
        }

        /** 采用框架提供的操作日志必须填写的项目 */
        public void setModeldetail()
        {
                this.setModelFieldDetail("id",this.getId());
                this.setModelFieldDetail("名称",this.getName());
                this.setModelFieldDetail("机构名称长度",this.orgLength);
                this.setModelFieldDetail("角色名称长度",this.roleLength);
        }

        @Override
        public List getUnits2Root()
        {
                List posts = new ArrayList();
                posts.addAll(this.org.getUnits2Root());
                posts.addAll(this.role.getUnits2Root());
                posts.add(this);
                return posts;
        }
}
